#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
规则制作器FastAPI服务启动脚本
"""

import subprocess
import sys
import os

def install_requirements():
    """安装必要的依赖"""
    requirements = [
        "fastapi",
        "uvicorn[standard]",
        "pydantic",
    ]
    
    for package in requirements:
        try:
            __import__(package.split('[')[0])
            print(f"✓ {package} 已安装")
        except ImportError:
            print(f"正在安装 {package}...")
            subprocess.check_call([sys.executable, "-m", "pip", "install", package])

def main():
    """启动FastAPI服务"""
    print("规则制作器 FastAPI 服务启动器")
    print("=" * 50)
    
    # 检查并安装依赖
    install_requirements()
    
    print("\n选择启动模式:")
    print("1. 开发模式（支持热重载）")
    print("2. 生产模式（稳定运行）")
    
    try:
        choice = input("请选择 (1/2，默认1): ").strip() or "1"
        
        # 启动服务
        print("\n启动服务...")
        print("服务地址: http://localhost:8000")
        print("API文档: http://localhost:8000/docs")
        print("按 Ctrl+C 停止服务")
        print("=" * 50)
        
        import uvicorn
        
        if choice == "1":
            # 开发模式 - 使用导入字符串
            print("🔄 开发模式启动（支持热重载）")
            uvicorn.run(
                "rule_maker_app:app",  # 使用导入字符串
                host="0.0.0.0", 
                port=8000, 
                reload=True,
                log_level="info"
            )
        else:
            # 生产模式 - 直接导入应用
            print("🚀 生产模式启动（稳定运行）")
            from rule_maker_app import app
            uvicorn.run(
                app, 
                host="0.0.0.0", 
                port=8000, 
                reload=False,
                log_level="info",
                access_log=True
            )
    except KeyboardInterrupt:
        print("\n服务已停止")
    except Exception as e:
        print(f"启动失败: {e}")
        print("\n故障排除指南:")
        print("1. 检查Oracle数据库连接是否正常")
        print("2. 确认config.py文件存在并配置正确")
        print("3. 确认common/rule_flatten_handle.py文件存在")
        print("4. 尝试运行 python check_imports.py 检查导入")
        print("5. 尝试使用生产模式启动")

if __name__ == "__main__":
    main()